/**
 * Tab组件的尺寸类型
 *
 * @format
 */

export type TabSize = 'small' | 'medium' | 'large';

/**
 * Tab组件的类型
 */
export type TabType = 'line' | 'card' | 'text';

/**
 * Tab组件的位置
 */
export type TabPosition = 'top' | 'bottom';

/**
 * Tab项的数据结构
 */
export interface TabItem {
  /**
   * 标签的唯一标识
   */
  name: string | number;

  /**
   * 标签的显示文本
   */
  title: string;

  /**
   * 是否禁用标签
   */
  disabled?: boolean;

  /**
   * 徽标内容
   */
  badge?: string | number;

  /**
   * 图标内容
   */
  icon?: string;
}

/**
 * Tab组件的属性
 */
export interface TabProps {
  /**
   * 当前激活标签的标识符
   */
  modelValue?: string | number;

  /**
   * 标签数据列表
   */
  tabs?: TabItem[];

  /**
   * 是否禁用所有标签
   */
  disabled?: boolean;

  /**
   * 标签栏背景色
   */
  background?: string;

  /**
   * 标签主题色
   */
  color?: string;

  /**
   * 标签类型
   */
  type?: TabType;

  /**
   * 是否显示标签栏下边框
   */
  border?: boolean;

  /**
   * 是否可以滚动
   */
  scrollable?: boolean;

  /**
   * 是否开启切换动画
   */
  animated?: boolean;

  /**
   * 是否开启延迟渲染（懒加载）
   */
  lazyRender?: boolean;

  /**
   * 是否使用粘性布局
   */
  sticky?: boolean;

  /**
   * 粘性布局的吸顶距离
   */
  offsetTop?: number;

  /**
   * 标签尺寸
   */
  size?: TabSize;

  /**
   * 标签位置
   */
  position?: TabPosition;

  /**
   * 是否可以通过滑动手势切换标签
   */
  swipeable?: boolean;
}

/**
 * Tab组件的事件
 */
export interface TabEvents {
  /**
   * 更新modelValue的事件
   */
  'update:modelValue': (name: string | number) => void;

  /**
   * 点击标签时触发
   */
  click: (name: string | number, event: Event) => void;

  /**
   * 当前激活的标签改变时触发
   */
  change: (name: string | number) => void;

  /**
   * 滚动时触发
   */
  scroll: (params: { scrollTop: number; isFixed: boolean }) => void;

  /**
   * 粘性布局状态改变时触发
   */
  'sticky-change': (isFixed: boolean) => void;
}

/**
 * Tab组件的方法
 */
export interface TabMethods {
  /**
   * 滚动到指定标签
   */
  scrollTo: (name: string | number) => void;

  /**
   * 获取当前激活的标签标识符
   */
  getActiveName: () => string | number;

  /**
   * 设置当前激活的标签
   */
  setActiveName: (name: string | number) => void;
}

/**
 * TabPanel组件的属性
 */
export interface TabPanelProps {
  /**
   * 标签的唯一标识
   */
  name: string | number;

  /**
   * 标签的显示文本
   */
  title: string;

  /**
   * 是否禁用标签
   */
  disabled?: boolean;

  /**
   * 徽标内容
   */
  badge?: string | number;

  /**
   * 图标内容
   */
  icon?: string;
}
